package com.baidu.erp.utils;

import net.sf.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

public class BeanCopierUtil {

    private BeanCopierUtil(){}

    //享元模式，共享该map中的对象
    public static Map<String,BeanCopier> beanCopierCacheMap = new HashMap<>();

    /**\
     * 将 source 的属性拷贝到 target 中
     */
    public static void copy(Object source,Object target){
        //key
        String casheKey = source.getClass().toString()+target.getClass().toString();

        //双重检测锁
        BeanCopier beanCopier = null;
        if (beanCopierCacheMap.containsKey(casheKey)){
            beanCopier = beanCopierCacheMap.get(casheKey);
        }else {
            synchronized (BeanCopierUtil.class){
                if (beanCopierCacheMap.containsKey(casheKey)){
                    beanCopier = beanCopierCacheMap.get(casheKey);
                }else {
                    beanCopier =  BeanCopier.create(source.getClass(),target.getClass(),false);
                    beanCopierCacheMap.put(casheKey,beanCopier);
                }
            }
        }
        beanCopier.copy(source,target,null);
    }

}
